DearMiku

Flask + Gunicorn + Nginx 部署

字数统计: 959阅读时长: 3 min
2018/09/19 Share

Flask + Gunicorn + Nginx 部署

前言

本文记录我AWS上部署Flask服务器的过程~ 希望能帮到有需要的人, 由于本人水平有限,难免有错误与遗漏的地方~ 还请大家多多指正~ (๑•ᴗ•๑)

框架简介

Gunicorn

这里就要先说到WSGI,它是一个协议,定义与协调Python程序与请求之间的接口,常用的WSGI容器有Gunicorn和uWSGI,Gunicorn更加快捷,所以选择Gunicorn

Flask

Flask是一个基于Python的Web开发微框架,借助Web框架,我们就不用关心请求,响应这些底层的实现,而专注于业务的实现~ 而Flask相比于其他框架更加轻量,自由度更高,所以这里我选择了Flask

Nginx

Nginx 是一个异步框架的Web服务器,我将它部署在Gunicorn前面,通过反向代理连接. 其实不加Nginx也是可以的,但是加上Nginx有更多好处, 例如 静态文件支持,负载均衡等等,以后我会再研究研究,单独写一篇博文的~

架构预览

如图~

部署过程

部署的服务器是 AWS 上的 CentOS 服务器, 使用的是Python3.7.0,而AWS上是默认Python2.7的,所以第一步是 安装Python3 环境

安装Python3环境

下载,解压安装包

1
2
3
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

tar -zxvf Python-3.7.0.tgz

编译,安装Python3

在Linux上我们需要先安装 gcc 编译器

1
2
3
sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel

然后cd当解压目录中进行 编译安装

1
2
3
4
5
cd Python-3.7.0/

make

make install

修改软链接

1
2
3
4
5
6
#移除原有软链接
rm -f /usr/bin/{python,python3}

#创建新的软连接
ln -s /usr/local/python3.7.0/bin/python3.7 /usr/bin/python
ln -s /usr/local/python3.7.0/bin/python3.7 /usr/bin/python3

修改 yum

将 首行 的配置修改为Python3.7

1
2
3
vim /usr/bin/yum

将 "#!/usr/bin/python" 修改为 "#!/usr/bin/python2.7"

结果

这是我们查看Python版本 就如下~

pip3的安装

使用Python3自然要使用pip3了,下面是pip3的安装方法

安装解压 pip3

1
2
3
4
5
6
7
8
$ wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz

$ tar -zvxf 9.0.1 -C pip-9.0.1

$ cd pip-9.0.1

# 使用 Python 3 安装
$ python3 setup.py install

创建软连接与更新

1
2
3
sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3 

pip install --upgrade pip

此时,可能会报错误 /usr/bin/pip: No such file or directory 此时是因为pip升级后位置更改为/usr/local/bin/pip,所以要更新缓存

1
hash -r

配置虚拟环境

接下来就是要配置Python3的虚拟环境,避免相互影响

1
2
3
4
5
6
7
pip install --upgrade virtualenv

#在需要的目录下创建
virtualenv -p python3 venv

# 激活
source venv/bin/activate

配置Flask 和 Git

这里就是用pip安装自己需要的Web框架了,这里我就先只安装了一个Flask,然后用Git部署代码,因为现阶段代码比较简单,所以没用fabric,后续有时间我会研究研究~

1
pip install flask

Nginx配置

Nginx的安装很简单,只需要一条命令~

1
sudo yum install nginx

然后修改Nginx的配置文件 路径在 /etc/nginx/nginx.conf,主要是修改监听端口和root路径,

我是这样改的~ 监听5000端口, root指向我存放代码的Git仓库

screenshot

这样基本就可以了,然后是配置Gunicorn

Gunicorn

这里也很简单,名利如下~

1
2
3
4
5
# 安装
pip install gunicorn

#启动
gunicorn -w4 -b 0.0.0.0:5000 app:app

若出现无法启动Gunicorn服务的情况,有可能设置的端口已经被占用了~ 比如我 上次连接断开前没中止,就出现了 无法启动的情况~

如果一切正常的,访问ip就能正常展示了~~如果不能访问,建议排除是不是网关设置的问

screenshot

CATALOG
  1. 1. Flask + Gunicorn + Nginx 部署
  2. 2. 前言
  3. 3. 框架简介
    1. 3.1. Gunicorn
    2. 3.2. Flask
    3. 3.3. Nginx
    4. 3.4. 架构预览
  4. 4. 部署过程
    1. 4.1. 安装Python3环境
      1. 4.1.1. 下载,解压安装包
      2. 4.1.2. 编译,安装Python3
      3. 4.1.3. 修改软链接
      4. 4.1.4. 修改 yum
      5. 4.1.5. 结果
    2. 4.2. pip3的安装
      1. 4.2.1. 安装解压 pip3
      2. 4.2.2. 创建软连接与更新
    3. 4.3. 配置虚拟环境
    4. 4.4. 配置Flask 和 Git
    5. 4.5. Nginx配置
    6. 4.6. Gunicorn